Skip to content

typeof 运算符

typeof 运算符是 JavaScript 中用于确定一个变量或表达式的数据类型的运算符。它返回一个字符串,表示被检查的操作数的数据类型。

  • 识别所有值类型
  • 识别函数
  • 判断是否是引用类型(不可再细分)
js
typeof operand

// operand 可以是任何表达式或变量

返回值

typeof 运算符返回的结果是一个表示数据类型的字符串。可能的返回值包括:

  • "undefined":如果变量未定义。
  • "boolean":布尔类型。
  • "number":数字类型,包括整数和浮点数。
  • "string":字符串类型。
  • "object":对象类型(包括数组和 null)。
  • "function":函数类型。
  • "symbol":符号类型(ES6 引入)。
  • "bigint":大整数类型(ES11 引入)。
js
let a; console.log(typeof a); // "undefined"
const s = Symbol('s'); // "symbol"

console.log(typeof undefined); // "undefined"
console.log(typeof true);      // "boolean"
console.log(typeof 42);        // "number"
console.log(typeof 'hello');   // "string"
console.log(typeof Symbol());  // "symbol"
console.log(typeof 10n);       // "bigint"
js
console.log(typeof { x: 100});        // "object"
console.log(typeof [ 'a', 'b' ]);        // "object"
console.log(typeof null);      // "object" (这是一个历史遗留问题)
console.log(typeof function(){}); // "function"
console.log(typeof console.log) // "function"

特殊情况

  1. nulltypeof null 返回 "object",这是一个已知的历史遗留问题,因为在 JavaScript 的初期版本中,null 被当作空对象指针处理。

  2. 数组typeof 数组返回 "object"。要检查一个变量是否是数组,可以使用 Array.isArray() 方法。

    js
    console.log(Array.isArray([])); // true
  3. 未声明的变量:使用 typeof 检查一个未声明的变量不会抛出错误,而是返回 "undefined"

    js
    console.log(typeof someUndeclaredVariable); // "undefined"
  4. 函数:对于函数,typeof 运算符返回 "function",这对于区分函数和其他对象非常有用。

    js
    function example() {}
    console.log(typeof example); // "function"

实际应用

typeof 运算符在调试、类型检查和保证代码的稳健性方面非常有用。例如,可以在函数中检查参数类型,以确保传入的值是预期的类型。

js
function add(a, b) {
    if (typeof a !== 'number' || typeof b !== 'number') {
        throw new Error('Both arguments must be numbers.');
    }
    return a + b;
}